Violence Risk Assessment in Forensic Mental Health Services
In this systematic review, we evaluated the predictive performance of tools used to assess violence risk in forensic mental health, where they are routinely administered. This document is an accompanying file of the paper: Ogonah et al. Violence risk assessment instruments in forensic psychiatric populations: a systematic review and meta-analysis.Lancet Psychiatry. Oct 2023. 10.1016/S2215-0366(23)00256-0.
Author: Maya Ogonah, University of Oxford
Date: November 30, 2025
Libraries and data
First, load all necessary packages.
Code
if (!require("pacman")) install.packages("pacman")library(pacman)pacman::p_load( tidyverse, # data wrangling openxlsx, # opening excel spreadsheets metafor, # meta-analysis / forest plots maps, # map / spatial objects ggplot2, # data visualisation rJava, # for venneuler package venneuler # venn diagram )
Then load the extracted data.
Code
# data for the meta-analysisdata.meta <-read.xlsx("data/data.meta.all.xlsx")# data for the geographical map world.data <-read.xlsx("data/worldcount.xlsx")# violent recividivsmdata.violence1 <-read.xlsx("data/data.violence1.xlsx")data.violence2 <-read.xlsx("data/data.violence2.xlsx")# general recividivsm data.general <-read.xlsx("data/data.general.xlsx")# sexual recidivismdata.sexual <-read.xlsx("data/data.sexual.xlsx")# time-at-risk data.time <-read.xlsx("data/data.time-risk.xlsx")data.time <-arrange(data.time, desc(data.time$colour))
Prisma flow diagram
The Prisma flow diagram template was downloaded from Prisma Statement and completed manually.
Quality assessment
The Robvis tool was used to create the risk of bias diagram.
Meta-analysis
When a tool had been validated at least three times for the outcome, we applied a random effects model, using the inverse-variance method, for pooling the logit transformation of the area under the curve and confidence intervals. The predictive performance of each risk assessment instrument was pooled across all external validation studies regardless of study design (eg, including both retrospective and prospective cohort studies). To reduce bias, only independent validation studies with a sample size that is consistent with adequate statistical power were included in the primary analysis. We set this threshold at n=100, as a balance between the current methodological recommendations for minimum event numbers for validation studies and excluding too large a proportion of existing literature.
All figures included in the main manuscript were redrawn into The Lancet style by in-house Illustrators.
Meta-analysis of independent validation studies with a sample size of more than 100 participants
Meta-analyses by outcome type (violent, general, and sexual recidivism) and by risk assessment instrument. AUC=area under curve. HCRv2=Historial, Clinical, Risk Management-20 version 2. PCL:SV=Psychopathy Checklist— Screening Version. RE=random effects. VRAG=Violence Risk Appraisal Guide.
Supplementary materials
Geographical coverage
Geographical coverage of reviewed study samples.
Code
world_map <-map_data("world")count.map <-left_join(world.data, world_map, by ="region")
Code
ggplot(data = count.map, aes(x = long, y = lat, group = group))+geom_polygon(aes(fill = study.count), colour ="white")+theme_void()+scale_fill_viridis_c(option ="rocket",trans ="log", breaks=c(1, 3, 5, 7, 9, 11),name ="Study count", guide =guide_legend(keyheight =unit(8, units ="mm"), keywidth =unit(32, "mm"), label.position ="bottom", title.position ='top', nrow=6) ) +theme(text =element_text(color ="#22211d"),plot.background =element_rect(fill ="#f5f5f2", color =NA),panel.background =element_rect(fill ="#f5f5f2", color =NA),legend.background =element_rect(fill ="#f5f5f2", color =NA),legend.position =c(.15, 0.35),plot.title =element_text(size=40, hjust=0.01, color ="#4e4d47", margin =margin(b =0.5, t =0.4, l =2, unit ="cm")),plot.subtitle =element_text(size=40, hjust=0.01, color ="#4e4d47", margin =margin(b =0.5, t =0.43, l =2, unit ="cm")) )
AUCs for predicting violent recidivism
Area under the curve statistics for all validations for risk assessment tools used to predict violent recidivism (including non-independent and studies with small sample sizes).
Both Pham & Ducro (2008) and de Vogel et al. (2014) did not report the observed recidivism level or the AUC confidence intervals, therefore, could not be represented on the forest plot.
*Hanson & Thornton (2000) includes the PPI sample; **Hanson & Thornton (2000) includes the Oak Ridge sample. The predictive performance of the risk assessment tools was reported separately for each sample.
If a study assessed the predictive performance of multiple versions of the same tool, only the most up-to-date version is represented.
■ = 95% CI reported; ▴ = 95% CI estimated
AUCs for predicting general recidivism
Area under the curve statistics for all validations for risk assessment tools used to predict general recidivism.
Both Pham & Ducro (2008) and Nowak & Nugter (2014) did not report the observed recidivism level or the AUC confidence intervals, therefore, could not be represented on the forest plot.
If a study assessed the predictive performance of multiple versions of the same tool, only the most up-to-date version of each tool is represented.
■ = 95% CI reported; ▴ = 95% CI estimated
AUCs for predicting sexual recidivism
Area under the curve statistics for all validations for risk assessment tools used to predict sexual recidivism.
Pham & Ducro (2008) did not report the observed recidivism level or the AUC confidence intervals, therefore, could not be represented on the forest plot.
*Hanson & Thornton (2000) includes the PPI sample; **Hanson & Thornton (2000) includes the Oak Ridge sample. The predictive performance of the risk assessment tools was reported separately for each sample.
If a study assessed the predictive performance of multiple versions of the same tool, only the most up-to-date version of each tool is represented.
■ = 95% CI reported; ▴ = 95% CI estimated
Apparent, internal, and external validation efforts
The number of apparent, internal and external validations was calculated in the validation-samples.xlsx file.
Code
vd <-venneuler(c(A =3, B =3, C =47,"A&B"=2,"A&C"=1, "B&C"=1, "A&B&C"=1))vd$labels <-c("", "", "46")plot(vd)text(0.44, 0.50, "1")text(0.38, 0.39, "1")text(0.38, 0.59, "1")text(0.38, 0.50, "1")
Time-at-risk for violent risk assessment instruments
Time-at-risk for all validations of risk assessment tools used to predict violent recidivism.
Code
shapes =c(15, 17)shapes <- shapes[as.numeric(data.time$group)]colours =c("gray28", "royalblue3", "red3")colours <- colours[as.numeric(data.time$colour)]forest(x = data.time$auc, ci.lb = data.time$auc.lb, ci.ub = data.time$auc.ub, slab = data.time$`author(s).and.year`,psize =rep(1, length(data.time$auc)),xlab ="area under the curve (AUC)", refline =0.5,ylim =c(0.5, 100), # Increased from 100 to 102 for header spacexlim =c(-0.8, 1.25),ilab =c(data.time$samplesize), ilab.xpos =-0.1,cex =1.0, header ="Author(s) and Year",pch = shapes, col = colours)op <-par(cex=1.0, font=2)text(-0.1, 99, "Sample size") # Adjusted positiontext(0.90, 99.2, "AUC") # Adjusted position
Code
par(op)
Note
Area under the curve statistics for all studies for risk assessment tools used to predict violent recidivism (including non-independent and studies with small sample sizes). Here we represent the different time-at-risk for each individual study. Studies with a follow-up duration of 12 months or less are coloured in red, studies with a follow-up time of between 1-5 years are coloured in blue, and studies with a follow-up duration of over 5 years are represented in grey.